package com.dc.androidutilcode.utils;

import android.content.Context;
import android.content.res.Resources;

import androidx.annotation.ArrayRes;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;

import java.util.IllegalFormatException;

/**
 * 字符串工具类
 */
public class StringUtils {

    /**
     * 判断字符序列是否为 null 或长度为 0
     *
     * @param s 字符序列
     * @return 是否为 null 或长度为 0
     */
    public static boolean isEmpty(final CharSequence s) {
        return s == null || s.length() == 0;
    }

    /**
     * 判断字符串是否为 null 或全为空格
     *
     * @param s 字符串
     * @return 是否为 null 或全为空格
     */
    public static boolean isTrimEmpty(final String s) {
        return (s == null || s.trim().length() == 0);
    }

    /**
     * 判断字符串是否为 null 或全为空白字符（空白字符包括：空格，换行符，tab键。）
     *
     * @param s 字符串
     * @return 是否为 null 或全为空白字符
     */
    public static boolean isSpace(final String s) {
        if (s == null) return true;
        for (int i = 0, len = s.length(); i < len; ++i) {
            if (!Character.isWhitespace(s.charAt(i))) {
                return false;
            }
        }
        return true;
    }

    /**
     * 获取字符资源
     *
     * @param id 资源id
     * @return 字符串
     */
    public static String getString(Context context, @StringRes int id) {
        return getString(context, id, (Object[]) null);
    }

    /**
     * 获取字符资源
     *
     * @param id         资源id
     * @param formatArgs 参数
     * @return 格式化后字符串
     */
    public static String getString(Context context, @StringRes int id, Object... formatArgs) {
        try {
            return format(context.getString(id), formatArgs);
        } catch (Resources.NotFoundException e) {
            e.printStackTrace();
            return String.valueOf(id);
        }
    }

    /**
     * 格式化字符串
     *
     * @param str  原始字符串
     * @param args 参数
     * @return 格式化后字符串
     */
    public static String format(@Nullable String str, Object... args) {
        String text = str;
        if (text != null) {
            if (args != null && args.length > 0) {
                try {
                    text = String.format(str, args);
                } catch (IllegalFormatException e) {
                    e.printStackTrace();
                }
            }
        }
        return text;
    }

    /**
     * 获取字符数组资源
     *
     * @param id 资源id
     * @return 字符串数组
     */
    public static String[] getStringArray(Context context, @ArrayRes int id) {
        try {
            return context.getResources().getStringArray(id);
        } catch (Resources.NotFoundException e) {
            e.printStackTrace();
            return new String[]{String.valueOf(id)};
        }
    }
}
